package com.zys.el.user.util.HLightText;

import org.springframework.stereotype.Component;

import java.util.ArrayList;
import java.util.List;

// 1、段头 <p>开始的第一个字符到寻找到第一种，。？！
// 2、四字成语 切割符号与符号之间的字符串，判断是否为四字符
// 3、根据虚词来范围搜索
@Component
public class LightTextUtil {

    // 3、根据虚词来范围搜索
    // 未成功
    public String LeftFightWord(String text) {

        //是、的、因、得、做、作、问、读、写、了、为、乃、有、可、很、非、肯
        //左五个字右、右边十个字
        List<String> base = new ArrayList<>();
        base.add("是");
        base.add("的");
        base.add("得");
        base.add("做");
        base.add("作");
        base.add("读");
        base.add("写");
        base.add("为");
        base.add("乃");
        base.add("有");
        //StringBuilder与String的区别在于它是可变的，能够追加字符串内容。初始的StringBuilder对象长度为16个字符，但当追加长度超出初始长度时，StringBuilder会增加长度以容纳被附加的字符。

        // 根据符号切割成多个句子
        // 关键字前所有内容
        List<Integer> start = new ArrayList<>();
        start.add(0);
        for (int i = 0; i < text.length() - 3; i++) {
            if (text.charAt(i) == '，' || text.charAt(i) == '。' || text.charAt(i) == '？' || text.charAt(i) == '！') {
                start.add(i);
            }
        }
        start.add(text.length() - 1);
//        System.out.println(start);
        String result = "";
        for (int i = 0; i < start.size() - 1; i++) {
            String substring = text.substring(start.get(i), start.get(i + 1));
//            System.out.println(substring);
            OUT:
            for (int j = substring.length() - 1; j >= 0; j--) {
                for (int k = 0; k < base.size(); k++) {
                    if (substring.charAt(j) == base.get(k).charAt(0)) {

                        for (int p = j; p >= 0; p--) {
                            String chinese = "[\\u4e00-\\u9fa5\\w\\d]";

                            if (String.valueOf(substring.charAt(p)).matches(chinese)) {//除了数字、英文、汉文之外
                                continue;
                            }
                            //把当前索引前面得字符串包住
//                            System.out.println(substring.charAt(p));
                            StringBuilder t = new StringBuilder(substring);
                            t.insert(p + 1, "<span style=\"color: darkkhaki;\">");
                            t.insert(j + 33, "</span>");
                            substring = t.toString();
//                            System.out.println(substring);
                            break OUT;
                        }

                    }
                }
            }
            result += substring;

        }
//        System.out.println(result);
        return result;
    }

    // 1、段头 <p>开始的第一个字符到寻找到第一种，。？！
    public String headText(String text) {

        List<Integer> start = new ArrayList<>();
        for (int i = 0; i < text.length() - 3; i++) {
            if (text.charAt(i) == '<' && text.charAt(i + 1) == 'p' && text.charAt(i + 2) == '>') {
                start.add(i);
            }
        }
        String result = "";
        for (int i = 0; i < start.size(); i++) {
            if (i < start.size() - 1) {
//                System.out.println("-" + text.substring(start.get(i), start.get(i + 1)));
                String substring = text.substring(start.get(i), start.get(i + 1));
                for (int j = 3; j < substring.length(); j++) {
                    if (String.valueOf(substring.charAt(j)).equals("，") == false && String.valueOf(substring.charAt(j)).equals("。") == false && String.valueOf(substring.charAt(j)).equals("？") == false && String.valueOf(substring.charAt(j)).equals("！") == false && String.valueOf(substring.charAt(j)).equals("<") == false) {
                        continue;
                    } else {
//                        System.out.println("j" + j);
                        //<p>能够追加字符串内容。初始的StringBuilder对象长度为16个字符</p>
                        //得到。位置j，在<p>和。之间加样式
//                        for (int k = j - 1; k <= j; k--) {
//                            String chinese = "[\\u4e00-\\u9fa5\\w\\d]";
//
//                            if (String.valueOf(substring.charAt(k)).matches(chinese)) {//除了数字、英文、汉文之外
//                                if (k == 3) {
//                                    //if提前得到不是汉字就提前结束，得到当前位置k，在<p>和k之间加样式
//                                    StringBuilder t = new StringBuilder(substring);
//                                    t.insert(3, "<span style=\"color: darkkhaki;\">");
//                                    t.insert(j + 32, "</span>");
//                                    substring = t.toString();
//                                    System.out.println(substring);
//                                }
//                                continue;
//                            } else {
//                                //if提前得到不是汉字就提前结束，得到当前位置k，在<p>和k之间加样式
//                                StringBuilder t = new StringBuilder(substring);
//                                t.insert(3, "<span style=\"color: darkkhaki;\">");
//                                t.insert(j - k + 32, "</span>");
//                                substring = t.toString();
//                                System.out.println(substring);
//                                break;
//                            }
//                        }

                        StringBuilder t = new StringBuilder(substring);
                        t.insert(3, "<span style=\"color: darkkhaki;\">");
                        t.insert(j + 32, "</span>");
                        substring = t.toString();
//                        System.out.println(substring);
                        break;
                    }
                }
                result += substring;
            } else {
//                System.out.println("+" + text.substring(start.get(i)));
                String substring = text.substring(start.get(i));
                for (int j = 3; j < substring.length(); j++) {
                    if (String.valueOf(substring.charAt(j)).equals("，") == false && String.valueOf(substring.charAt(j)).equals("。") == false && String.valueOf(substring.charAt(j)).equals("？") == false && String.valueOf(substring.charAt(j)).equals("！") == false && String.valueOf(substring.charAt(j)).equals("<") == false) {
                        continue;
                    } else {
//                        System.out.println("============" + substring.substring(3, j));
//                        System.out.println("j" + j);
                        //<p>能够追加字符串内容。初始的StringBuilder对象长度为16个字符</p>
                        //得到。位置j，在<p>和。之间加样式
//                        for (int k = j - 1; k <= j; k--) {
//                            String chinese = "[\\u4e00-\\u9fa5\\w\\d]";
//
//                            if (String.valueOf(substring.charAt(k)).matches(chinese)) {//除了数字、英文、汉文之外
//                                if (k == 3) {
//                                    //if提前得到不是汉字就提前结束，得到当前位置k，在<p>和k之间加样式
//                                    StringBuilder t = new StringBuilder(substring);
//                                    t.insert(3, "<span style=\"color: darkkhaki;\">");
//                                    t.insert(j + 32, "</span>");
//                                    substring = t.toString();
//                                    System.out.println(substring);
//                                }
//                                continue;
//                            } else {
//                                //if提前得到不是汉字就提前结束，得到当前位置k，在<p>和k之间加样式
//                                StringBuilder t = new StringBuilder(substring);
//                                t.insert(3, "<span style=\"color: darkkhaki;\">");
//                                t.insert(j - k + 32, "</span>");
//                                substring = t.toString();
//                                System.out.println(substring);
//                                break;
//                            }
//                        }
                        StringBuilder t = new StringBuilder(substring);
                        t.insert(3, "<span style=\"color: darkkhaki;\">");
                        t.insert(j + 32, "</span>");
                        substring = t.toString();
//                        System.out.println(substring);
                        break;
                    }
                }
                result += substring;
            }
        }
        return result;
    }

    private static boolean isChinese(char c) {
        Character.UnicodeBlock ub = Character.UnicodeBlock.of(c);
        if (ub == Character.UnicodeBlock.CJK_UNIFIED_IDEOGRAPHS || ub == Character.UnicodeBlock.CJK_COMPATIBILITY_IDEOGRAPHS
                || ub == Character.UnicodeBlock.CJK_UNIFIED_IDEOGRAPHS_EXTENSION_A || ub == Character.UnicodeBlock.CJK_UNIFIED_IDEOGRAPHS_EXTENSION_B
                || ub == Character.UnicodeBlock.CJK_SYMBOLS_AND_PUNCTUATION || ub == Character.UnicodeBlock.HALFWIDTH_AND_FULLWIDTH_FORMS
                || ub == Character.UnicodeBlock.GENERAL_PUNCTUATION) {
            return true;
        }
        return false;
    }


    // 2、四字成语 切割符号与符号之间的字符串，判断是否为四字符
    public String ForthCi(String text) {
        List<Integer> start = new ArrayList<>();
        start.add(0);
        for (int i = 0; i < text.length() - 3; i++) {
            if (text.charAt(i) == '，' || text.charAt(i) == '。' || text.charAt(i) == '？' || text.charAt(i) == '！') {
                start.add(i);
            }
        }
        start.add(text.length() - 1);
//        System.out.println(start);
        String result = "";
        for (int i = 0; i < start.size() - 1; i++) {
            String substring = text.substring(start.get(i), start.get(i + 1));
//            System.out.println(substring);
            int length = start.get(i + 1) - start.get(i);
            if (length <= 6 && length >= 3) {
                StringBuilder t = new StringBuilder(substring);
                t.insert(0, "<span style=\"color: darkkhaki;\">");
                t.insert(length + 32, "</span>");
                substring = t.toString();
//                System.out.println(substring);
            }
            result += substring;

        }
        return result;
    }

//    public static void main(String[] args) {
//        LightTextUtil l = new LightTextUtil();
//        l.LeftFightWord("<p>StringBuilder与String的区别在于它是可变的，能够追加字符串内容。</p>初始的StringBuilder对象长度为16个字符，但当追加长度超出初始长度时，StringBuilder会增加长度以容纳被附加的字符。");
//
////        System.out.println("<span style=\"color: darkkhaki;\">".length());
//    }
}
